package org.ch04.test00.lx02;

import java.lang.reflect.Method;
import java.lang.reflect.Parameter;

/**
 * @author ZQX
 * @date 2025-03-31
 */
public class MainTest {
    public static void main(String[] args) throws Exception {

        int n = 999;

        int sum = SumUtil.getSum(n);

        // 第一：定义操作类的 Class 对象
        Class<SumUtil> clazz = SumUtil.class;

        // 第二：基于 Class 对象实现相关的操作
        // 1.获取方法对象
        Method method = clazz.getDeclaredMethod("getSum", int.class);

        // 错误 - 获取的是方法上面的注解
        // Max annotation = method.getAnnotation(Max.class);

        // 2.获取方法的所有参数对象
        Parameter[] parameters = method.getParameters();

        // 3.获取第一个参数对象
        Parameter firstParam = parameters[0];

        // 4.判断第一个参数对象是否存在 Max 注解
        if (firstParam.isAnnotationPresent(Max.class)) {
            // 5.存在，获取注解的值
            int maxValue = firstParam
                    .getAnnotation(Max.class)
                    .value();

            // 6.逻辑处理
            if (n > maxValue) {
                throw new RuntimeException("求和的最大值不能超过：" + maxValue + "，当前值为：" + n);
            }
        }


        System.out.println(sum);
    }
}
